#include "estadisticasmodel.h"

EstadisticasModel::EstadisticasModel( DataStore* datastore ) : _datastore( datastore ), _estadisticas( NULL ), _cantidad(0)
{}

void EstadisticasModel::loadEstadisticas( Buceador* buceador )
{
    beginResetModel();
    _estadisticas = buceador->estadisticas();
    _cantidad = 9;
    endResetModel();
}

int EstadisticasModel::rowCount( const QModelIndex& /*parent = QModelIndex()*/ ) const
{
    if( !_estadisticas ) return 0;
    return _cantidad;
}

QVariant EstadisticasModel::data( const QModelIndex& index, int role ) const
{
    if( !index.isValid() ) return QVariant();
    if( index.row() < 0 || index.row() >= _cantidad ) return QVariant();
    //if( role == Qt::DisplayRole ) return QVariant();
    if( role == Qt::SizeHintRole )
    {
        if( index.row() == 0 )
            return QSize( -1, 30 );
        else return QSize( -1, 40 );
    }
    if( role == EstadisticasModel::EstadisticaRole )
    {
        switch( index.row() )
        {
            case 1: return trUtf8( "Número de inmersiones" );
            case 2: return trUtf8( "Tiempo total de fondo" );
            case 3: return trUtf8( "Tiempo desde la última inmersión" );
            case 4: return trUtf8( "Inmersión más profunda" );
            case 5: return trUtf8( "Inmersión menos profunda" );
            case 6: return trUtf8( "Intervalo de superficie más corto" );
            case 7: return trUtf8( "Temperatura de fondo más baja" );
            case 8: return trUtf8( "Temperatura de fondo más alta" );
        }
    }
    if( role == EstadisticasModel::ValorRole )
    {
        switch( index.row() )
        {
            case 1: return _estadisticas->numeroInmersiones();
            case 2: return Utils::formatHm( _estadisticas->tiempoTotalFondo() );
            case 3: return trUtf8( "%1 días" ).arg( _estadisticas->diasDesdeUtima() );
            case 4: return trUtf8( "%L1%2" ).arg( _estadisticas->masProfunda()->profundidadMaxima() ).arg( Unidad::profundidad );
            case 5: return trUtf8( "%L1%2" ).arg( _estadisticas->menosProfunda()->profundidadMaxima() ).arg( Unidad::profundidad );
            case 6:
                if( !_estadisticas->intervaloMasCorto()->intervaloSuperficie().isNull() )
                    return Utils::formatMs( _estadisticas->intervaloMasCorto()->intervaloSuperficie().value() );
                break;
            case 7:
                if( !_estadisticas->masCalurosa()->temperaturaFondo().isNull() )
                    return trUtf8( "%1%2" ).arg( _estadisticas->masFria()->temperaturaFondo().value() ).arg( Unidad::temperatura );
                break;
            case 8:
                if( !_estadisticas->masFria()->temperaturaFondo().isNull() )
                    return trUtf8( "%1%2" ).arg( _estadisticas->masCalurosa()->temperaturaFondo().value() ).arg( Unidad::temperatura );
                break;
        }
    }
    if( role == EstadisticasModel::InmersionRole )
    {
        QVariant v;
        switch( index.row() )
        {
            case 1:
            case 2:
            case 3:
                break;
            case 4: v.setValue( _estadisticas->masProfunda() );
                break;
            case 5: v.setValue( _estadisticas->menosProfunda() );
                break;
            case 6: v.setValue( _estadisticas->intervaloMasCorto() );
                break;
            case 7: v.setValue( _estadisticas->masFria() );
                break;
            case 8: v.setValue( _estadisticas->masCalurosa() );
                break;
        }
        return v;
    }
    return QVariant();
}
